<!doctype html>



  


<html class="theme-next pisces use-motion">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>



<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />












  
  
  <link href="/vendors/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />




  
  
  
  

  
    
    
  

  

  

  

  

  
    
    
    <link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
  






<link href="/vendors/font-awesome/css/font-awesome.min.css?v=4.4.0" rel="stylesheet" type="text/css" />

<link href="/css/main.css?v=5.0.1" rel="stylesheet" type="text/css" />


  <meta name="keywords" content="王雨峰, 博客" />








  <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=5.0.1" />






<meta name="description" content="本期写一些初学者学C语言时可能会遇到的问题，为什么说是「可能遇到」呢？因为这些基本上都是我在学习的过程中遇到过的问题，曾经困扰过我。文章内容都是基础的内容，如果你觉得阅读起来有困难，可能是因为你还没学到那里。别着急，可以先收藏这篇文章，学习的过程中，想到这个问题时可再回来看看。
想到啥写啥。没时间列大纲了。
分享给各位学弟学妹一个建议：请以审辩的态度去听取他人的建议，包括我的这条建议。为什么呢？因">
<meta property="og:type" content="article">
<meta property="og:title" content="C语言学习札记(一)">
<meta property="og:url" content="http://wangyufeng.org/2015/09/18/c-learning-1/index.html">
<meta property="og:site_name" content="王雨峰的博客">
<meta property="og:description" content="本期写一些初学者学C语言时可能会遇到的问题，为什么说是「可能遇到」呢？因为这些基本上都是我在学习的过程中遇到过的问题，曾经困扰过我。文章内容都是基础的内容，如果你觉得阅读起来有困难，可能是因为你还没学到那里。别着急，可以先收藏这篇文章，学习的过程中，想到这个问题时可再回来看看。
想到啥写啥。没时间列大纲了。
分享给各位学弟学妹一个建议：请以审辩的态度去听取他人的建议，包括我的这条建议。为什么呢？因">
<meta property="og:updated_time" content="2015-09-18T11:08:38.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="C语言学习札记(一)">
<meta name="twitter:description" content="本期写一些初学者学C语言时可能会遇到的问题，为什么说是「可能遇到」呢？因为这些基本上都是我在学习的过程中遇到过的问题，曾经困扰过我。文章内容都是基础的内容，如果你觉得阅读起来有困难，可能是因为你还没学到那里。别着急，可以先收藏这篇文章，学习的过程中，想到这个问题时可再回来看看。
想到啥写啥。没时间列大纲了。
分享给各位学弟学妹一个建议：请以审辩的态度去听取他人的建议，包括我的这条建议。为什么呢？因">



<script type="text/javascript" id="hexo.configuration">
  var NexT = window.NexT || {};
  var CONFIG = {
    scheme: 'Pisces',
    sidebar: {"position":"left","display":"post"},
    fancybox: true,
    motion: true,
    duoshuo: {
      userId: 0,
      author: '博主'
    }
  };
</script>




  <link rel="canonical" href="http://wangyufeng.org/2015/09/18/c-learning-1/"/>

  <title> C语言学习札记(一) | 王雨峰的博客 </title>
</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">

  










  
  
    
  

  <div class="container one-collumn sidebar-position-left page-post-detail ">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-meta ">
  

  <div class="custom-logo-site-title">
    <a href="/"  class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <span class="site-title">王雨峰的博客</span>
      <span class="logo-line-after"><i></i></span>
    </a>
  </div>
  <p class="site-subtitle">随便写点东西，为互联网贡献一些比特~</p>
</div>

<div class="site-nav-toggle">
  <button>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
  </button>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        <li class="menu-item menu-item-home">
          <a href="/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />
            
            首页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-about">
          <a href="/about" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-user"></i> <br />
            
            关于
          </a>
        </li>
      
        
        <li class="menu-item menu-item-archives">
          <a href="/archives" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
            
            归档
          </a>
        </li>
      

      
    </ul>
  

  
</nav>

 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                C语言学习札记(一)
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2015-09-18T17:45:10+08:00" content="2015-09-18">
              2015-09-18
            </time>
          </span>

          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        <p>本期写一些初学者学C语言时可能会遇到的问题，为什么说是「可能遇到」呢？因为这些基本上都是我在学习的过程中遇到过的问题，曾经困扰过我。文章内容都是基础的内容，如果你觉得阅读起来有困难，可能是因为你还没学到那里。别着急，可以先收藏这篇文章，学习的过程中，想到这个问题时可再回来看看。</p>
<p>想到啥写啥。没时间列大纲了。</p>
<p>分享给各位学弟学妹一个建议：<strong>请以审辩的态度去听取他人的建议，包括我的这条建议。</strong>为什么呢？因为大家所走的路，和你将要走的路，尤其是你 <em>想</em> 要走的路，很可能相差甚远。别人的建议可能对你来说没有价值，甚至对你有负面的价值。比如说，会有人说「C语言的细节很多，不用搞明白那些细节」，也有人说「C语言不重要，你直接看面向对象语言就行」。这些意见自然多多益善，但对你最了解的还是你自己。</p>
<p>哈，上边出现了一个递归，你发现了吗？递归是咱们计算机科学中非常有意思的一件事，大家在学「函数」这章的时候，递归也是个不太容易理解的地方。不过大家可以放心，在C语言中，递归的方案完全可以转化为循环(while/for/do,for)的方案，除非在特殊的情况下，使用递归的场合不多。</p>
<p>一周下来四晚有课，心堵。</p>
<p>#如何向他人求助程序问题？</p>
<p>##搜索引擎是你最好的帮手</p>
<p>你所遇到的任何问题，有99.99%的几率，已经被别人遇到过了。在互联网上，有很多人在提问，也有很多热心的人在解答。将你的问题非口语化的描述，或报出的错误信息放在搜索引擎上查一查，一般问题都能得以解决。像是百度知道 / csdn和博客园的博客 / 知乎 之类的网站，存在着很多问题的解决方案。</p>
<p>如果总是查不到，可能是选取的关键词、或错误信息的提取不够准确。多查查就有感觉了。</p>
<p>##善用错误信息</p>
<p>如果程序存在语法问题，那么在编译的时候，VS会给你报个错。这些Error都是有描述性的信息的，大多数情况下，根据这些信息便可以修正程序错误。但往往错误信息是<em>英文的</em>，但都不复杂，很容易读懂。大不了把错误信息在百度上搜一下。</p>
<blockquote>
<p>Tips，如果错误信息在百度上查一无所获，去Google上试一试，往往有惊喜。</p>
</blockquote>
<p>但有些情况下，VS给你的错误信息让你觉得莫名其妙，完全驴唇不对马嘴。这种情况也是常见的，毕竟VS不是万能的。这种情况下，请参见下一个建议：</p>
<p>##再多读一遍<br>真的，这招太有用了。</p>
<ul>
<li>main → mian</li>
<li>true → ture</li>
<li>就算我按不序顺话说你能看也懂</li>
</ul>
<p>这种错误很容易犯，我现在写程序手一抖就打出个ture，然后还一点都看不出来。其实C语言还好，像是Javascript（大家以后可能会接触到）这样的『不那么严格的语言』，如果打错变量名，想找出错误来能把人累死。很多奇怪的问题都是由于细节的错误造成的，比如打错了字、少打了右大括号，打了不该打的分号，等等。如果问题就是特别奇怪，特别顽固，请试着再读一遍程序。</p>
<p>当然了，编译器能报错这件事，就已经令人感到非常幸福了。将来大家都会写大课设，到时候就会发现，绝大多数错误都是编译器报不出来的。尤其是一些「确实已经写错了的地方，但是C语言编译器以为你想故意这样hack一下」的错误，就不得不需要调试的手段了。现在大家除了F10逐行运行之外，还不需要太多调试的方法，但养成好的写代码习惯，比如命名、代码格式等等，还是请从现在做起。</p>
<p>#为什么能写C语言的程序有那么多？<br>你可能会发现，大家用于学习C语言的软件都不太一样。在机房，老师可能为大家展示VC6.0；你的同学中，有些人用Code::Blocks，有些人用着迷离的高端程序，你可能正在用VS2015.</p>
<p>它们有什么区别？区别不大。它们都被称作「IDE」，都能写C语言。只是各种附加的工具不同。想详细了解「IDE」，可翻阅本公众号的往期文章。</p>
<p>请注意：C语言不是程序，C语言只是一种『编程语言』。所以说用哪种「IDE」去学习，都是无关紧要的。我个人推荐大家使用VS。</p>
<blockquote>
<p>其实VS和其他的IDE还是有些区别，这些区别有时能能影响到大家。有时候，可能你同学写好的、能够完美运行的代码，完整复制到你的电脑上，却运行不正常，甚至没法编译。因为VS的「编译器」和其他的IDE多少有些不一样。甚至VS和VC也不一样。「编译器」决定了IDE如何去处理代码，而不同的编译器的处理方法有所不同。那应该怎么办？尽量使你的代码写的规范，就能大大避免这种问题。下面有相关的问题会提到。</p>
</blockquote>
<p>#注意 = 和 ==<br>在C语言中，</p>
<ul>
<li>= 叫做 赋值号</li>
<li>== 叫做 等于判断符</li>
</ul>
<p>这事儿是个大坑，基本每个人都得栽里边儿，我就栽在里面很多很多次。</p>
<p>比如<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">if (a = 1)</div></pre></td></tr></table></figure></p>
<p>这种语句，你的意思可能是如果a等于1，就怎么样。但在这里，会把 1 赋值给 a。关键在于，这种问题程序是不报错的。那为什么程序不报错呢？因为(a = 1)理论上可作为一个表达式，这个表达式也是可以表达值的。</p>
<p>听说有些编译器会对这种情况报一个 Warning，因为这种错误实在是太常见了，专业的程序员也有时中招。</p>
<blockquote>
<p>理论上的建议是，不将『左值』作为变量名，也就是说只写(1 == a)而不是(a == 1)，因为这样的话就算是不小心少打了一个=，编译器就会报错。因为常数1不能被赋值。</p>
</blockquote>
<p>#到底是 void main 还是 int main ?<br>大家已经学习到了，C语言中最核心的函数是「主函数」，主函数就是形如<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">int main()&#123;</div><div class="line">	xxxxxx....</div><div class="line">&#125;</div></pre></td></tr></table></figure></p>
<p>这样的函数。大家可能会注意到，在有些课件和书上的示例中，写的是<code>void main</code>，那到底哪个对？</p>
<p>先给结论：<strong>只写</strong><code>int main</code></p>
<p>int main 是目前最为规范的写法。C语言自诞生以来，并不是一成不变的。有些特性被淘汰、有些被更新、还有些新的特性加入，所以可以这样理解，void main 是一种历史遗留的写法，已经不用了。那为什么书上和课件上还有呢？大家可以注意观察下，有些课件的年龄已经10+了。或者说，咱们的老师学这门语言的时候，规范和今天并不一样。</p>
<p>#主函数最后的 return 0 是什么意思？<br>其实这个<code>return 0</code>是可以不写的。如果不写的话，相当于「编译器」自动帮我们加上这行。return 0如果写的话，必须写在主函数的最后一行写。如果return 0后边还有语句，就不会被执行。</p>
<p>大家观察<code>int main(){}</code>最前面的<code>int</code>。可能大家还没有学到「函数」，这里为大家介绍一下，C语言中的「函数」(function)和数学里的函数可以类比理解，即「给这个函数参数」，然后「函数返回给你结果」。所以在C语言中，函数名前面的「类型」就指的是「函数返回值的类型」。</p>
<ul>
<li>int add(1,2){ … } ， 表示 add 这个函数的返回值的类型是整型(整数)</li>
<li>void run(){ … } , 表示 run 这个函数没有返回值(void 差不多是「nothing」的意思)</li>
</ul>
<p>那么，int main 的意思就是，<strong>主函数的返回值类型是整型</strong>。</p>
<p>你也许会问，既然C语言中函数的返回值是给用户看的，那为什么主函数也有一个「返回值」呢？答案是这样的：对于普通的函数来说，调用他们的人是「主函数」，也就是说他们的返回值会返回给「主函数」。那么主函数是谁调用呢？是「操作系统」调用主函数。比如你的电脑是Windows 7，那么就是Windows 7 调用了这个主函数。</p>
<p>那为什么需要返回值？当一个主函数返回一个「0」给操作系统时，操作系统就知道这个函数的运行结果「正常的」，也就是这个函数正常地运行完毕了。这就是 return 0 的意义。</p>
<hr>
<p>今天就发这几个吧。如果大家有任何问题，欢迎后台来留言或直接跟我聊。我保证，如果我不知道答案、也在网上查不到资料的话，我会说不知道，保证不跟你胡诌。</p>

      
    </div>

    <div>
      
        

      
    </div>

    <div>
      
        

      
    </div>

    <footer class="post-footer">
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/2015/09/15/Mountain/" rel="next" title="Mountain">
                <i class="fa fa-chevron-left"></i> Mountain
              </a>
            
          </div>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/2015/09/24/too-many-authentication-failures-error/" rel="prev" title="ssh 连接时出现 too many authentication failures error">
                ssh 连接时出现 too many authentication failures error <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </article>



    <div class="post-spread">
      
    </div>
  </div>


          </div>
          


          
  <div class="comments" id="comments">
    
  </div>


        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
            文章目录
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview">
            站点概览
          </li>
        </ul>
      

      <section class="site-overview sidebar-panel ">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
          <img class="site-author-image" itemprop="image"
               src="/images/avatar.gif"
               alt="Alan" />
          <p class="site-author-name" itemprop="name">Alan</p>
          <p class="site-description motion-element" itemprop="description">Alan Wang's personal blog.</p>
        </div>
        <nav class="site-state motion-element">
          <div class="site-state-item site-state-posts">
            <a href="/archives">
              <span class="site-state-item-count">57</span>
              <span class="site-state-item-name">日志</span>
            </a>
          </div>

          
            <div class="site-state-item site-state-categories">
              
                <span class="site-state-item-count">9</span>
                <span class="site-state-item-name">分类</span>
              
            </div>
          

          
            <div class="site-state-item site-state-tags">
              
                <span class="site-state-item-count">4</span>
                <span class="site-state-item-name">标签</span>
              
            </div>
          

        </nav>

        

        <div class="links-of-author motion-element">
          
        </div>

        
        

        
        

      </section>

      
        <section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
          <div class="post-toc">
            
              
            
            
              <p class="post-toc-empty">此文章未包含目录</p>
            
          </div>
        </section>
      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright" >
  
  &copy; 
  <span itemprop="copyrightYear">2016</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">Alan</span>
</div>

<div class="powered-by">
  Powered by <a class="theme-link" href="https://hexo.io">Hexo</a> 
</div>

<div class="theme-info">
  主题 -
  <a class="theme-link" href="https://github.com/iissnan/hexo-theme-next">
    NexT.Pisces
  </a>
</div>

        

        
      </div>
    </footer>

    <div class="back-to-top">
      <i class="fa fa-arrow-up"></i>
    </div>
  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>









  



  
  <script type="text/javascript" src="/vendors/jquery/index.js?v=2.1.3"></script>

  
  <script type="text/javascript" src="/vendors/fastclick/lib/fastclick.min.js?v=1.0.6"></script>

  
  <script type="text/javascript" src="/vendors/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>

  
  <script type="text/javascript" src="/vendors/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/vendors/velocity/velocity.ui.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/vendors/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>


  


  <script type="text/javascript" src="/js/src/utils.js?v=5.0.1"></script>

  <script type="text/javascript" src="/js/src/motion.js?v=5.0.1"></script>



  
  


  <script type="text/javascript" src="/js/src/affix.js?v=5.0.1"></script>

  <script type="text/javascript" src="/js/src/schemes/pisces.js?v=5.0.1"></script>



  
  <script type="text/javascript" src="/js/src/scrollspy.js?v=5.0.1"></script>
<script type="text/javascript" src="/js/src/post-details.js?v=5.0.1"></script>



  


  <script type="text/javascript" src="/js/src/bootstrap.js?v=5.0.1"></script>



  



  




  
  

  

  

  

</body>
</html>
